package com.example.arithmeticleetcode.learnArithmetic.quque;

import com.example.arithmeticleetcode.learnArithmetic.quque.circle.CircleDeque;
import com.example.arithmeticleetcode.learnArithmetic.quque.circle.CircleQuque;

/**
 * @program: arithmetic-leetcode
 * @description:
 * @author: FangZhen
 * @create: 2020-08-20 16:14
 **/
public class QuqueTest {

    public static void main(String[] args) {

//        Quque<Integer> quque = new Quque<>();
//        quque.enQuque(11);
//        quque.enQuque(22);
//        quque.enQuque(33);
//        quque.enQuque(44);
//        while (!quque.isEmpty()) {
//            System.out.println(quque.deQuque());
//        }
//
//        System.out.println("-------------------------------");
//
//        QuqueByStack<Integer> ququeByStack = new QuqueByStack<>();
//        ququeByStack.enQuque(11);
//        ququeByStack.enQuque(22);
//        ququeByStack.enQuque(33);
//        ququeByStack.enQuque(44);
//        while (!ququeByStack.isEmpty()) {
//            System.out.println(ququeByStack.deQuque());
//        }
//
//        System.out.println("------------------双端队列----------------------");
//        DeQuque<Integer> deQuque = new DeQuque<>();
//        deQuque.enQuqueFront(11);
//        deQuque.enQuqueFront(22);
//        deQuque.enQuqueRear(33);
//        deQuque.enQuqueRear(44); //   44 33 11 22
//        while (!deQuque.isEmpty()) {
//            System.out.println(deQuque.deQuqueRear());
//        }

//        test02();
        test03();

    }

    //循环队列测试
    static void test02() {
        CircleQuque<Integer> circleQuque = new CircleQuque<>();
        // 0  1 2 3 4 5 6 7 8 9
        for (int i = 0; i < 10; i++) {
            circleQuque.enQuque(i);
        }
        System.out.println(circleQuque);

        //null null null null null 5 6 7 8 9
        for (int i = 0; i < 5; i++) {
            circleQuque.deQuque();
        }

        System.out.println(circleQuque);

        //15 16 17 18 19 5 6 7 8 9
        for (int i = 15; i < 20; i++) {
            circleQuque.enQuque(i);
        }

        System.out.println(circleQuque);
        while (!circleQuque.isEmpty()) {
            System.out.println(circleQuque.deQuque());
        }
    }


    static void test03() {
        CircleDeque<Integer> circleDeque = new CircleDeque<>();
        // 5 4 2 1 101 102 103 104 105 106 8 7 6 null null null null null null null

        // 8 7 6 5 4 3 2 1  100 101 102 103 104 105 106 107 108 109  null null 10 9
        for (int i = 0; i < 10; i++) {
            circleDeque.enQuqueFront(i + 1);
            circleDeque.enQuqueRear(i + 100);
        }

        // null 7 6 5 4 3 2 1  100 101 102 103 104 105 106 null null null  null null null null
        for (int i = 0; i < 3; i++) {
            circleDeque.deQuqueFront();
            circleDeque.deQuqueRear();
        }

        // 11 7 6 5 4 3 2 1  100 101 102 103 104 105 106 null null null  null null null 12
        circleDeque.enQuqueFront(11);
        circleDeque.enQuqueFront(12);

        System.out.println(circleDeque);

        while (!circleDeque.isEmpty()) {
            System.out.println(circleDeque.deQuqueFront());
        }
    }
}
